package com.boat.framework.base.exception;

/**
 * 错误码
 * 
 * 错误码组成:应用标识 +功能模块+ 错误类型+错误编码
 * 
 * 应用标识(1位字母). 例如:用户中心:U;ERP系统: E
 * 
 * 功能模块(2位数字). 例如:末分类:00;用户登录鉴权:01;......
 * 
 * 错误类型(1位字母) 例如:认证授权:A; 业务错误:B;缓存错误:C; 数据库错误:D;文件I0错误:F;网络错误:N;其他错误: 0;参数错误: P:
 * RPC错误: R;系统错误: S;
 * 
 * 错误编码(2位数字) 自增即可，每个模块的每种错误类型可以注册100个错误，如果使用合理的话，是完全够用的
 * 
 * 错误码位数:6位，位数固定 
 * 
 * 错误码示例: U01P01，我们可以看出这是用户中心服务的登录鉴权模块报出的参数校验异常，错误编码为01
 * 使用规范:只增不改，避免混乱，并且要避免使用者随意定义新的错误码 正常情况返回:正常情况返回时使用固定值 000000 填充
 * 
 * @author 周江
 *
 */
public interface ErrorCode {
	String getCode();

	String getMessage();
	
	/**
	 * 使用方法：ErrorCode.INVALID_PARAMETER.getMessage(new String[] {"请求地址不正确"})
	 * @param param
	 * @return
	 */
	public default String getMessage(Object params[]) {
		if (params != null) {
			return String.format(getMessage(), params);
		}

		return getMessage();
	}
}
